package com.school.information.entity;

import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.serializer.ToStringSerializer;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.school.information.core.security.entity.BaseEntity;
import com.school.information.enums.status.EnabledEnum;
import com.school.information.enums.status.MenuTypeEnum;
import com.school.information.enums.status.YesOrNoEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@TableName("sys_menu")
public class SysMenuEntity extends BaseEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 菜单名称
     */
    private String menuName;

    /**
     * 父菜单名称
     */
    @TableField(exist = false)
    private String parentName;

    /**
     * 父菜单ID
     */
    @JSONField(serializeUsing = ToStringSerializer.class)
    private Long parentId;

    /**
     * 显示顺序
     */
    private Integer orderNum;

    /**
     * 路由地址
     */
    private String path;

    /**
     * 组件路径
     */
    private String component;

    /**
     * 是否为外链（0否 1是）
     */
    private YesOrNoEnum isFrame;

    /**
     * 是否缓存（0不缓存 1缓存）
     */
    private YesOrNoEnum isCache;

    /**
     * 类型（0目录 1菜单 2按钮）
     */
    private MenuTypeEnum menuType;

    /**
     * 显示状态（0不隐藏 1隐藏）
     */
    private YesOrNoEnum visible;

    /**
     * 菜单状态 是否启用 0启用 1禁用
     */
    private EnabledEnum isEnabled;

    /**
     * 权限字符串
     */
    private String perms;

    /**
     * 菜单图标
     */
    private String icon;

    /**
     * 子菜单
     */
    @TableField(exist = false)
    private List<SysMenuEntity> children = new ArrayList<SysMenuEntity>();
}
